home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / CursorPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  8KB  |  365 lines

  1. /*
  2. **    CursorPanel.c
  3. **
  4. **    Editing panel for cursor key configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_QUALIFIER=1,GAD_UP,GAD_DOWN,GAD_RIGHT,GAD_LEFT,
  17.             GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL,GAD_DEFAULT,
  18.             GAD_DISCARD
  19.         };
  20.  
  21. BOOL
  22. CursorPanelConfig(struct Configuration *LocalConfig,struct CursorKeys *CursorKeys,STRPTR LastCursorKeys,struct Window *Parent,BOOL *ChangedPtr)
  23. {
  24.     struct CursorKeys *Keys;
  25.     BOOL Changed;
  26.  
  27.     Changed = FALSE;
  28.  
  29.     if(Keys = (struct CursorKeys *)AllocVecPooled(sizeof(struct CursorKeys),MEMF_ANY))
  30.     {
  31.         LayoutHandle *Handle;
  32.  
  33.         CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  34.  
  35.         if(Handle = LT_CreateHandleTags(Parent->WScreen,
  36.             LAHN_LocaleHook,    &LocaleHook,
  37.         TAG_DONE))
  38.         {
  39.             struct Window *PanelWindow;
  40.  
  41.             LT_New(Handle,
  42.                 LA_Type,VERTICAL_KIND,
  43.             TAG_DONE);
  44.             {
  45.                 LT_New(Handle,
  46.                     LA_Type,VERTICAL_KIND,
  47.                 TAG_DONE);
  48.                 {
  49.                     LT_New(Handle,
  50.                         LA_Type,        CYCLE_KIND,
  51.                         LA_LabelID,        MSG_MACROPANEL_KEY_MODIFIER_GAD,
  52.                         LA_ID,            GAD_QUALIFIER,
  53.                         LACY_TabKey,    TRUE,
  54.                         LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  55.                         LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  56.                     TAG_DONE);
  57.  
  58.                     LT_New(Handle,
  59.                         LA_Type,        XBAR_KIND,
  60.                     TAG_DONE);
  61.  
  62.                     LT_EndGroup(Handle);
  63.                 }
  64.  
  65.                 LT_New(Handle,
  66.                     LA_Type,VERTICAL_KIND,
  67.                 TAG_DONE);
  68.                 {
  69.                     LT_New(Handle,
  70.                         LA_Type,        STRING_KIND,
  71.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_UP_GAD,
  72.                         LA_Chars,        30,
  73.                         LA_ID,            GAD_UP,
  74.                         GTST_MaxChars,    structsizeof(CursorKeys,Keys[0][0]) - 1,
  75.                     TAG_DONE);
  76.  
  77.                     LT_New(Handle,
  78.                         LA_Type,        STRING_KIND,
  79.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_DOWN_GAD,
  80.                         LA_Chars,        30,
  81.                         LA_ID,            GAD_DOWN,
  82.                         GTST_MaxChars,    structsizeof(CursorKeys,Keys[0][0]) - 1,
  83.                     TAG_DONE);
  84.  
  85.                     LT_New(Handle,
  86.                         LA_Type,        STRING_KIND,
  87.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_RIGHT_GAD,
  88.                         LA_Chars,        30,
  89.                         LA_ID,            GAD_RIGHT,
  90.                         GTST_MaxChars,    structsizeof(CursorKeys,Keys[0][0]) - 1,
  91.                     TAG_DONE);
  92.  
  93.                     LT_New(Handle,
  94.                         LA_Type,        STRING_KIND,
  95.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_LEFT_GAD,
  96.                         LA_Chars,        30,
  97.                         LA_ID,            GAD_LEFT,
  98.                         GTST_MaxChars,    structsizeof(CursorKeys,Keys[0][0]) - 1,
  99.                     TAG_DONE);
  100.  
  101.                     LT_EndGroup(Handle);
  102.                 }
  103.  
  104.                 LT_New(Handle,
  105.                     LA_Type,VERTICAL_KIND,
  106.                 TAG_DONE);
  107.                 {
  108.                     LT_New(Handle,
  109.                         LA_Type,        XBAR_KIND,
  110.                         LAXB_FullSize,    TRUE,
  111.                     TAG_DONE);
  112.  
  113.                     LT_EndGroup(Handle);
  114.                 }
  115.  
  116.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  117.                     LAGR_SameSize,    TRUE,
  118.                     LAGR_Spread,    TRUE,
  119.                 TAG_DONE);
  120.                 {
  121.                     LT_New(Handle,
  122.                         LA_Type,        BUTTON_KIND,
  123.                         LA_LabelID,        MSG_GLOBAL_USE_GAD,
  124.                         LA_ID,            GAD_USE,
  125.                         LABT_ReturnKey,    TRUE,
  126.                         LABT_ExtraFat,    TRUE,
  127.                     TAG_DONE);
  128.  
  129.                     LT_New(Handle,
  130.                         LA_Type,        BUTTON_KIND,
  131.                         LA_LabelID,        MSG_GLOBAL_DEFAULT_GAD,
  132.                         LA_ID,            GAD_DEFAULT,
  133.                     TAG_DONE);
  134.  
  135.                     LT_New(Handle,
  136.                         LA_Type,        BUTTON_KIND,
  137.                         LA_LabelID,        MSG_GLOBAL_LOAD_GAD,
  138.                         LA_ID,            GAD_LOAD,
  139.                     TAG_DONE);
  140.  
  141.                     LT_New(Handle,
  142.                         LA_Type,        BUTTON_KIND,
  143.                         LA_LabelID,        MSG_GLOBAL_SAVE_GAD,
  144.                         LA_ID,            GAD_SAVE,
  145.                     TAG_DONE);
  146.  
  147.                     LT_New(Handle,
  148.                         LA_Type,        BUTTON_KIND,
  149.                         LA_LabelID,        MSG_DISCARD_GAD,
  150.                         LA_ID,            GAD_DISCARD,
  151.                     TAG_DONE);
  152.  
  153.                     LT_New(Handle,
  154.                         LA_Type,        BUTTON_KIND,
  155.                         LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  156.                         LA_ID,            GAD_CANCEL,
  157.                         LABT_EscKey,    TRUE,
  158.                     TAG_DONE);
  159.  
  160.                     LT_EndGroup(Handle);
  161.                 }
  162.  
  163.                 LT_EndGroup(Handle);
  164.             }
  165.  
  166.             if(PanelWindow = LT_Build(Handle,
  167.                 LAWN_TitleID,        MSG_CURSORPANEL_CURSOR_PREFERENCES_TXT,
  168.                 LAWN_HelpHook,        &GuideHook,
  169.                 LAWN_Parent,        Parent,
  170.                 WA_DepthGadget,        TRUE,
  171.                 WA_DragBar,            TRUE,
  172.                 WA_RMBTrap,            TRUE,
  173.                 WA_Activate,        TRUE,
  174.                 WA_SimpleRefresh,    TRUE,
  175.             TAG_DONE))
  176.             {
  177.                 UBYTE DummyBuffer[MAX_FILENAME_LENGTH];
  178.                 struct FileRequester *FileRequest;
  179.                 struct IntuiMessage *Message;
  180.                 struct Gadget *MsgGadget;
  181.                 LONG Modifier,i;
  182.                 ULONG MsgClass;
  183.                 UWORD MsgCode;
  184.                 BOOL Done;
  185.  
  186.                 Modifier = 0;
  187.  
  188.                 GuideContext(CONTEXT_CURSOR);
  189.  
  190.                 PushWindow(PanelWindow);
  191.  
  192.                 LT_ShowWindow(Handle,TRUE);
  193.  
  194.                 for(i = 0 ; i < 4 ; i++)
  195.                 {
  196.                     LT_SetAttributes(Handle,GAD_UP + i,
  197.                         GTST_String,Keys->Keys[Modifier][i],
  198.                     TAG_DONE);
  199.                 }
  200.  
  201.                 Done = FALSE;
  202.  
  203.                 do
  204.                 {
  205.                     if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  206.                         break;
  207.  
  208.                     while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  209.                     {
  210.                         MsgClass    = Message->Class;
  211.                         MsgCode        = Message->Code;
  212.                         MsgGadget    = (struct Gadget *)Message->IAddress;
  213.  
  214.                         LT_ReplyIMsg(Message);
  215.  
  216.                         if(MsgClass == IDCMP_GADGETUP)
  217.                         {
  218.                             switch(MsgGadget->GadgetID)
  219.                             {
  220.                                 case GAD_DEFAULT:
  221.  
  222.                                     ResetCursorKeys(Keys);
  223.  
  224.                                     for(i = 0 ; i < 4 ; i++)
  225.                                     {
  226.                                         LT_SetAttributes(Handle,GAD_UP + i,
  227.                                             GTST_String,Keys->Keys[Modifier][i],
  228.                                         TAG_DONE);
  229.                                     }
  230.  
  231.                                     break;
  232.  
  233.                                 case GAD_QUALIFIER:
  234.  
  235.                                     for(i = 0 ; i < 4 ; i++)
  236.                                         strcpy(Keys->Keys[Modifier][i],LT_GetString(Handle,GAD_UP + i));
  237.  
  238.                                     Modifier = MsgCode;
  239.  
  240.                                     for(i = 0 ; i < 4 ; i++)
  241.                                     {
  242.                                         LT_SetAttributes(Handle,GAD_UP + i,
  243.                                             GTST_String,Keys->Keys[Modifier][i],
  244.                                         TAG_DONE);
  245.                                     }
  246.  
  247.                                     break;
  248.  
  249.                                 case GAD_USE:
  250.  
  251.                                     LT_LockWindow(PanelWindow);
  252.  
  253.                                     for(i = 0 ; i < 4 ; i++)
  254.                                         strcpy(Keys->Keys[Modifier][i],LT_GetString(Handle,GAD_UP + i));
  255.  
  256.                                     CopyMem(Keys,CursorKeys,sizeof(struct CursorKeys));
  257.  
  258.                                     Changed = TRUE;
  259.  
  260.                                     if(ChangedPtr)
  261.                                         *ChangedPtr = TRUE;
  262.  
  263.                                     Done = TRUE;
  264.                                     break;
  265.  
  266.                                 case GAD_DISCARD:
  267.  
  268.                                     if(ChangedPtr)
  269.                                         *ChangedPtr = FALSE;
  270.  
  271.                                     Done = TRUE;
  272.                                     Changed = TRUE;
  273.                                     break;
  274.  
  275.                                 case GAD_CANCEL:
  276.  
  277.                                     Changed = FALSE;
  278.                                     Done = TRUE;
  279.                                     break;
  280.  
  281.                                 case GAD_LOAD:
  282.  
  283.                                     LT_LockWindow(PanelWindow);
  284.  
  285.                                     strcpy(DummyBuffer,LastCursorKeys);
  286.  
  287.                                     if(FileRequest = OpenSingleFile(PanelWindow,LocaleString(MSG_CURSORPANEL_LOAD_CURSOR_KEYS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  288.                                     {
  289.                                         FreeAslRequest(FileRequest);
  290.  
  291.                                         if(!ReadIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  292.                                             ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  293.                                         else
  294.                                         {
  295.                                             Changed = TRUE;
  296.  
  297.                                             if(ChangedPtr)
  298.                                                 *ChangedPtr = FALSE;
  299.  
  300.                                             strcpy(LastCursorKeys,DummyBuffer);
  301.  
  302.                                             if(LocalConfig)
  303.                                                 strcpy(LocalConfig->CursorFileName,LastCursorKeys);
  304.  
  305.                                             for(i = 0 ; i < 4 ; i++)
  306.                                             {
  307.                                                 LT_SetAttributes(Handle,GAD_UP + i,
  308.                                                     GTST_String,Keys->Keys[Modifier][i],
  309.                                                 TAG_DONE);
  310.                                             }
  311.                                         }
  312.                                     }
  313.  
  314.                                     LT_UnlockWindow(PanelWindow);
  315.  
  316.                                     break;
  317.  
  318.                                 case GAD_SAVE:
  319.  
  320.                                     LT_LockWindow(PanelWindow);
  321.  
  322.                                     for(i = 0 ; i < 4 ; i++)
  323.                                         strcpy(Keys->Keys[Modifier][i],LT_GetString(Handle,GAD_UP + i));
  324.  
  325.                                     strcpy(DummyBuffer,LastCursorKeys);
  326.  
  327.                                     if(FileRequest = SaveFile(PanelWindow,LocaleString(MSG_CURSORPANEL_SAVE_CURSOR_KEYS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  328.                                     {
  329.                                         FreeAslRequest(FileRequest);
  330.  
  331.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  332.                                             ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  333.                                         else
  334.                                         {
  335.                                             strcpy(LastCursorKeys,DummyBuffer);
  336.  
  337.                                             if(LocalConfig)
  338.                                                 strcpy(LocalConfig->CursorFileName,LastCursorKeys);
  339.  
  340.                                             if(ChangedPtr)
  341.                                                 *ChangedPtr = FALSE;
  342.                                         }
  343.                                     }
  344.  
  345.                                     LT_UnlockWindow(PanelWindow);
  346.  
  347.                                     break;
  348.                             }
  349.                         }
  350.                     }
  351.                 }
  352.                 while(!Done);
  353.  
  354.                 PopWindow();
  355.             }
  356.  
  357.             LT_DeleteHandle(Handle);
  358.         }
  359.  
  360.         FreeVecPooled(Keys);
  361.     }
  362.  
  363.     return(Changed);
  364. }
  365.